package com.example.d4_tcp1;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP通信快速入门 服务端 -> 1发1收
 */
public class Server {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动...");
        /**
         * 1.创建一个ServerSocket对象，指定服务器注册端口
         */
        ServerSocket serverSocket = new ServerSocket(8888);

        /**
         * 2.使用serverSocket对象，调用accept方法，等待客户端的连接请求，返回一个Socket对象
         * 线程堵塞等待连接请求
         */
        Socket socket = serverSocket.accept();

        /**
         * 3.从socket通信管道中得到一个字节输入流，读取客户端发送的数据
         */
        InputStream inputStream = socket.getInputStream();

        /**
         * 4.将低级的字节输入流包装成高级的数据输入流
         */
        DataInputStream dataInputStream = new DataInputStream(inputStream);

        /**
         * 5.读取客户端发送的数据
         */
        String data = dataInputStream.readUTF();
        System.out.println("服务端接收的数据：" + data);
        System.out.println("客户端IP地址：" + socket.getRemoteSocketAddress());

        /**
         * 6.释放资源（Socket、ServerSocket）
         */
        dataInputStream.close(); // 释放数据输入流的资源
        socket.close(); // 释放socket的资源
        serverSocket.close(); // 释放serverSocket的资源
    }
}
